package opf5.entities.partidos;

import java.util.ArrayList;
import java.util.List;

import opf5.entities.dominio.Jugador;
import opf5.entities.dominio.Partido;
import opf5.entities.repositorios.RepositorioPartidos;

public class RepositorioPartidosEnMemoria implements RepositorioPartidos {
	private List<Partido> partidos = new ArrayList<Partido>();
	
	@Override
	public List<Partido> getPartidosDisponiblesPara(Jugador jugador) {
		List<Partido> partidosDisponibles = new ArrayList<Partido>();
		
		for (Partido partido : partidos) {
			if (! partido.estaInscripto(jugador) && ! partido.estaTerminado())
				partidosDisponibles.add(partido);
		}
		
		return partidosDisponibles;
	}

	@Override
	public void agregarPartido(Partido partido) {
		partidos.add(partido);
	}

	@Override
	public List<Partido> getPartidosInscriptos(Jugador jugador) {
		List<Partido> partidosDisponibles = new ArrayList<Partido>();
		
		for (Partido partido : partidos) {
			if (partido.estaInscripto(jugador)) {
				partidosDisponibles.add(partido);
			}
		}
		
		return partidosDisponibles;
	}

	@Override
	public List<Partido> getPartidosConInscripcionAbierta() {
		List<Partido> partidosAbiertos = new ArrayList<Partido>();
		
		for (Partido p : partidos) {
			if (! p.estaTerminado()) {
				partidosAbiertos.add(p);
			}
		}
		
		return partidosAbiertos;
	}

	@Override
	public void eliminarPartido(Partido partido) {
		this.partidos.remove(this.partidos.indexOf(partido));
	}

	@Override
	public List<Partido> getPartidosJugadosPor(Jugador jugador) {
		List<Partido> partidosJugados = new ArrayList<Partido>();
		
		for (Partido p : partidos) {
			if (p.estaTerminado() && p.estaInscripto(jugador)) {
				partidosJugados.add(p);
			}
		}
		
		return partidosJugados;
	}

	@Override
	public List<Partido> getPartidosNoJugadosDe(Jugador jugador) {
		List<Partido> partidosNoJugados = new ArrayList<Partido>();
		
		for (Partido p : partidos) {
			if (! p.estaTerminado() && p.estaInscripto(jugador)) {
				partidosNoJugados.add(p);
			}
		}
		
		return partidosNoJugados;
	}

	@Override
	public List<Partido> getPartidos() {
		return partidos;
	}

	public void setPartidos(List<Partido> partidos2) {
		this.partidos = partidos2;
	}
}
